package br.com.vti.sisp_sicrim.antigo.controller.tela;

import java.text.SimpleDateFormat;
import java.util.Calendar;

import br.com.caelum.vraptor.Result;
import br.com.vti.sisp_sicrim.antigo.controller.programa.Idcpm001;
import br.com.vti.sisp_sicrim.antigo.controller.programa.Tabpap01;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe responsavel por encapsular o tratamento e as consistencias da tela Tabtap01
 * 
 * @author Incode - Data: mai/2014
 * 
 */
public class Tabtap01 {
	private boolean enviada = false;
	private String pagina = "/resources/antigo/jsp/Tabtap01.jsp";
	private String versao;
	private String dataCorrente;
	private String operacao;
	private String horaCorrente;
	private String sn;
	private long codele;
	private int tPosto;
	private String desc1;
	private String desp1;
	private int desp2;
	private String desp3;
	private String desc2;
	private String chalfa1;
	private int dintabMatfun;
	private String empresa;
	private String nomeClasse;
	private String mensagem = "";
	private String funcao = "0";
	private String campofocus = "codele";
	private String navegar = "";
	public Boolean temMensagem = false;
	private Result result;
	private Sessao sessao; // Classes views

	// Classes includes
	public Tabtap01() {
		inicializar(false);
	}

	public Tabtap01(boolean primeiraVez, Sessao sessao) {
		this.sessao = sessao;
		inicializar(primeiraVez);
	}

	public void inicializar(boolean primeiraVez) {
		if (primeiraVez) {
			versao = "9.9";
			dataCorrente = "";
			operacao = "";
			sn = "";
			codele = 0;
			tPosto = 0;
			desc1 = "";
			desp1 = "";
			desp2 = 0;
			desp3 = "";
			desc2 = "";
			chalfa1 = "";
			dintabMatfun = 0;
			empresa = "";
			nomeClasse = "";
			empresa = sessao.getSisgsisp().getEmpresa();
			operacao = sessao.getSisgsisp().getOperacao();
		}
		horaCorrente = new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime()); // *TIMX
	}

	public boolean receberTela(boolean primeiraVez, Result result) {
		// faz o tratamento das criticas necessarias para os dados da tela
		// recebida
		this.result = result;
		temMensagem = false;
		if (!primeiraVez) {
			return validar();
		} else {
			return true;
		}
	}

	public void enviarTela(boolean primeiraVez, Result result, String origem) {
		this.enviada = true;
		// rotina para enviar a tela
		// caso esteja setado valores para acoesFinais, executa as classes
		// correspondentes
		this.result = result;
		if (UtilBean.acoesFinais != null && !UtilBean.acoesFinais.isEmpty()) {
			UtilBean.processaAcao();
		} else {
			enviar(result, origem);
		}
	}

	public void enviar(Result result, String origem) {
		// redicionar para o jsp correspondente
		UtilBean.redireciona(pagina, result, origem);
	}

	public void enviarMensagem(String campo, String mensagem) {
		// formatar a mensagem de erro, posicionar no campo informa
		if (campo != null) {
			campofocus = campo;
		} else {
			campofocus = "";
		}
		this.mensagem = mensagem;
		temMensagem = true;
		// enviar(result, origem);
	}

	public boolean validar() {
		// validar os campos recebidos da tela
		UtilBean.funcao = this.funcao;
		ValidarFuncao();
		if (temMensagem) {
			return false;
		}
		ValidarCodele();
		if (temMensagem) {
			return false;
		}
		ValidarTPosto();
		if (temMensagem) {
			return false;
		}
		ValidarDesc1();
		if (temMensagem) {
			return false;
		}
		ValidarDesc2();
		if (temMensagem) {
			return false;
		}
		ValidarChalfa1();
		if (temMensagem) {
			return false;
		}
		ValidarD01desc1();
		if (temMensagem) {
			return false;
		}

		sessao.getSisgsisp().setEmpresa(this.empresa);
		sessao.getSisgsisp().setOperacao(this.operacao);
		sessao.getSisgsisp().setVersao(this.versao);
		return true;
	}

	private void ValidarFuncao() {
		// Consist�ncia F00funcao
		if (!(UtilBean.funcao.equals(UtilBean.ctt_processa) || UtilBean.funcao.equals(UtilBean.ctt_confirma) || UtilBean.funcao.equals(UtilBean.ctt_retorna))) {
			enviarMensagem(null, "");
			return;
		}
	}

	private void ValidarCodele() {
		// Consist�ncia F00CODELE
		if (UtilBean.funcao.equals(UtilBean.ctt_retorna) && sn.equals("N")) {
			Idcpm001 idcpm001 = new Idcpm001(result, sessao);
			idcpm001.executar(null);
		}
	}

	private void ValidarTPosto() {
		// Consist�ncia F00T-POSTO
		if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
			Tabpap01 tabpap01 = new Tabpap01(result, sessao);
			tabpap01.executar(null, null, null, null);
		}
		if (tPosto == 0 && sn.equals("S")) {
			enviarMensagem("tposto", "");
			return;
		}
	}

	private void ValidarDesc1() {
		// Consist�ncia F00DESC1
		if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
			Tabpap01 tabpap01 = new Tabpap01(result, sessao);
			tabpap01.executar(null, null, null, null);
		}
		if (desc1.trim().equals("") && operacao.equals("ATP") && sn.equals("S")) {
			enviarMensagem("desc1", "");
			return;
		}
	}

	private void ValidarDesc2() {
		// Consist�ncia F00DESC2
		if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
			Tabpap01 tabpap01 = new Tabpap01(result, sessao);
			tabpap01.executar(null, null, null, null);
		}
		if (desc2.trim().equals("") && sn.equals("S")) {
			enviarMensagem("desc2", "");
			return;
		}
	}

	private void ValidarChalfa1() {
		// Consist�ncia F00CHALFA1
		if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
			Tabpap01 tabpap01 = new Tabpap01(result, sessao);
			tabpap01.executar(null, null, null, null);
		}
		if (chalfa1.trim().equals("") && sn.equals("S")) {
			enviarMensagem("chalfa1", "");
			return;
		}
	}

	private void ValidarD01desc1() {
		// Consist�ncia D01DESC1
	}

	public String getVersao() {
		return versao;
	}

	public void setVersao(String versao) {
		this.versao = versao;
	}

	public String getDataCorrente() {
		return dataCorrente;
	}

	public void setDataCorrente(String dataCorrente) {
		this.dataCorrente = dataCorrente;
	}

	public String getOperacao() {
		return operacao;
	}

	public void setOperacao(String operacao) {
		this.operacao = operacao;
	}

	public String getSn() {
		return sn;
	}

	public void setSn(String sn) {
		this.sn = sn;
	}

	public long getCodele() {
		return codele;
	}

	public void setCodele(long codele) {
		this.codele = codele;
	}

	public int getTposto() {
		return tPosto;
	}

	public void setTposto(int tPosto) {
		this.tPosto = tPosto;
	}

	public String getDesc1() {
		return desc1;
	}

	public void setDesc1(String desc1) {
		this.desc1 = desc1;
	}

	public String getDesp1() {
		return desp1;
	}

	public void setDesp1(String desp1) {
		this.desp1 = desp1;
	}

	public int getDesp2() {
		return desp2;
	}

	public void setDesp2(int desp2) {
		this.desp2 = desp2;
	}

	public String getDesp3() {
		return desp3;
	}

	public void setDesp3(String desp3) {
		this.desp3 = desp3;
	}

	public String getDesc2() {
		return desc2;
	}

	public void setDesc2(String desc2) {
		this.desc2 = desc2;
	}

	public String getChalfa1() {
		return chalfa1;
	}

	public void setChalfa1(String chalfa1) {
		this.chalfa1 = chalfa1;
	}

	public int getDintabmatfun() {
		return dintabMatfun;
	}

	public void setDintabmatfun(int dintabMatfun) {
		this.dintabMatfun = dintabMatfun;
	}

	public String getEmpresa() {
		return empresa;
	}

	public void setEmpresa(String empresa) {
		this.empresa = empresa;
	}

	public String getNomeClasse() {
		return nomeClasse;
	}

	public void setNomeClasse(String nomeClasse) {
		this.nomeClasse = nomeClasse;
	}

	public String getHoraCorrente() {
		return horaCorrente;
	}

	public void setHoraCorrente(String horaCorrente) {
		this.horaCorrente = horaCorrente;
	}

	public String getFuncao() {
		return funcao;
	}

	public void setFuncao(String funcao) {
		this.funcao = funcao;
	}

	public String getCampofocus() {
		return campofocus;
	}

	public void setCampofocus(String campofocus) {
		this.campofocus = campofocus;
	}

	public String getNavegar() {
		return navegar;
	}

	public void setNavegar(String navegar) {
		this.navegar = navegar;
	}

	public String getMensagem() {
		return mensagem;
	}

	public void setMensagem(String mensagem) {
		this.mensagem = mensagem;
	}

	public void setMensagemSaida(String mensagem) {
		this.mensagem = mensagem;
	}

	public boolean getEnviada() {
		return this.enviada;
	}

	public void setSessao(Sessao sessao) {
		this.sessao = sessao;
	}

	public void setEnviada(boolean enviada) {
		this.enviada = enviada;

	}
}
